#include <stdio.h>
#include <stdint.h>
#define TEST  3

#if TEST== 1 
void swap(int a, int b) {
	int temp = a;
	a = b;
	b = temp;
	printf("swap函数中交换后	a = %d,b = %d\n", a, b);
	printf("swap函数中  &a = %p,&b = %p\n", &a, &b);
}

int main() {
	int a = 10;
	int b = 20;
	printf("main初始化值	a = %d,b = %d\n", a, b);
	printf("main初始化值的地址	&a = %p,&b = %p\n",&a,&b);
	swap(a, b);
	printf("在main中调用swap函数后	a = %d,b = %d\n", a, b);

	return 0;
}
#elif TEST == 2
/*
**	这段代码中的swap函数使用了指针传递的方式，传递的是a和b变量的地址。
**	在swap函数中，a和b是指针变量，temp也是一个指针变量，它们都存储了a和b的地址。
**	当执行a=b;b=temp;时，a指向了b原来指向的地址，而b指向了temp原来指向的地址，也就是a的地址。
**	但是，这些指针变量只在swap函数内部有效，函数执行完毕后，它们所指向的地址和值都被释放了。
**	因此，swap函数并没有改变a和b的值。
*/
void swap(int* a, int* b) {
	int* temp = a;
	a = b;
	b = temp;
	printf("swap函数中交换后	a = %d,b = %d\n", *a, *b);
	printf("swap函数中	&a = %p,&b = %p\n", &a, &b);
}

int main() {
	int a = 10;
	int b = 20;
	printf("main初始化值	a = %d,b = %d\n", a, b);
	printf("main初始化值的地址	&a = %p,&b = %p\n", &a, &b);
	swap(&a, &b);
	printf("在main中调用swap函数后	a = %d,b = %d\n", a, b);

	return 0;
}
#elif TEST == 3
/*
**	这段代码中a、b的值被改变是因为在swap函数中，
**	通过传递它们的地址（即指向它们的指针），swap函数可以访问和修改它们的值。
**	具体来说，swap函数中的语句*a = *b;将b所指向的值赋给a所指向的位置，*b = temp;将temp的值赋给b所指向的位置，
**	从而实现了a、b值的交换。在main函数中调用swap函数后，a、b的值得到了交换，因此输出的结果也反映了这一变化。
*/
void swap(int* a, int* b) {
	int	temp = *a;
	*a = *b;
	*b = temp;
	printf("swap函数中交换后	*a = %d,*b = %d\n", *a, *b);
	printf("swap函数中	&a = %p,&b = %p\n", &a, &b);
}

int main() {
	int a = 10;
	int b = 20;
	printf("main初始化值	a = %d,b = %d\n", a, b);
	printf("main初始化值的地址	&a = %p,&b = %p\n", &a, &b);
	swap(&a, &b);
	printf("在main中调用swap函数后	a = %d,b = %d\n", a, b);

	return 0;
}
#endif
